package cqie.edu.homework2.util;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class EncryptionUtil {
    // 必须与前端的配置完全一致
    private static final String ALGORITHM = "AES";
    private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding"; // PKCS5Padding = PKCS7Padding（Java中同名）
    private static final String SECRET_KEY = "1234567890123456"; // 16字节密钥（与前端一致）

    /**
     * 解密前端加密的数据
     * @param encryptedValue 前端CryptoJS加密后的Base64字符串
     * @return 解密后的明文
     */
    public static String decrypt(String encryptedValue) {
        try {
            // 1. Base64解码
            byte[] encryptedBytes = Base64.getDecoder().decode(encryptedValue.trim());

            // 2. 创建密钥（与前端相同方式）
            SecretKeySpec secretKey = new SecretKeySpec(
                    SECRET_KEY.getBytes(StandardCharsets.UTF_8),
                    ALGORITHM
            );

            // 3. 初始化解密器（ECB模式无需IV）
            Cipher cipher = Cipher.getInstance(TRANSFORMATION);
            cipher.init(Cipher.DECRYPT_MODE, secretKey);

            // 4. 执行解密
            byte[] decryptedBytes = cipher.doFinal(encryptedBytes);

            return new String(decryptedBytes, StandardCharsets.UTF_8);
        } catch (Exception e) {
            throw new RuntimeException("解密失败，请检查：\n" +
                    "1. 密钥是否匹配（前端：" + SECRET_KEY + "）\n" +
                    "2. 加密模式是否同为AES/ECB/PKCS7\n" +
                    "3. 原始加密数据：" + encryptedValue, e);
        }
    }
}